﻿using System;
using System.Linq;
using System.Web.UI;
using System.Web.UI.WebControls;
using ShoppingCart.Business.Entity.Collections;
using ShoppingCart.Business.Logic;
using ShoppingCart.WebSite.Code;
using SC = ShoppingCart.Business.Entity;

namespace ShoppingCart.WebSite.Admin
{
    public partial class Precios : BasePage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack) return;
            CargarProductos();
        }

        protected void DdlProductosSelectedIndexChanged(object sender, EventArgs e)
        {
            var idProducto = Convert.ToInt32(ddlProductos.SelectedValue);
            CargarProducto(idProducto);
        }

        protected void BtnAsignarClick(object sender, EventArgs e)
        {
            for (var i = 0; i < gvPrecios.Rows.Count; i++)
            {
                var txtPrecio = (TextBox)gvPrecios.Rows[i].FindControl("txtPrecio");
                txtPrecio.Text = txtPrecioGeneral.Text;
            }
        }

        protected void BtnGuardarClick(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(litIdProducto.Text)) return;
            GuardarPrecios();
        }

        private void CargarProductos()
        {
            var productos = ProductoManager.Instancia.Listar();
            BindControl<SC.Producto>.BindDropDownList(ddlProductos, productos);
            litMensaje.Text = string.Empty;
            if (productos.Count == 0) return;
            CargarProducto(productos.First().IdProducto);
        }

        private void CargarProducto(int idProducto)
        {
            var producto = ProductoManager.Instancia.Obtener(idProducto);
            litIdProducto.Text = idProducto.ToString().PadLeft(6, '0');
            litNombre.Text = producto.Nombre;
            litLinea.Text = producto.Linea.Nombre;
            litEstado.Text = producto.Estado ? "HABILITADO" : "NO HABILITADO";
            imgIcono.ImageUrl = producto.Icono;
            hlkEditar.NavigateUrl = "Producto.aspx?IdProducto=" + idProducto + "&Accion=M";

            var precios = ProductoDepartamentoManager.Instancia.ListarPorIdProducto(idProducto);
            BindControl<SC.PrecioStock>.BindGrid(gvPrecios, precios);
            if (precios.Count == 0) return;
            divPrecio.Visible = true;
            txtPrecioGeneral.Text = string.Empty;
        }

        private void GuardarPrecios()
        {
            try
            {
                var coleccion = new PrecioStockCollection();
                coleccion.AddRange(from GridViewRow row in gvPrecios.Rows
                                   select new SC.PrecioStock
                                   {
                                       Producto = new SC.Producto { IdProducto = Int32.Parse(litIdProducto.Text) },
                                       Departamento = new SC.Departamento { IdDepartamento = Convert.ToInt32(row.Cells[0].Text) },
                                       Stock = Convert.ToInt32(((TextBox)row.FindControl("txtStock")).Text),
                                       Precio = Convert.ToDecimal(((TextBox)row.FindControl("txtPrecio")).Text),
                                       Estado = Convert.ToBoolean(((CheckBox)row.FindControl("ckbEstado")).Checked)
                                   });
                ProductoDepartamentoManager.Instancia.Agregar(coleccion);
                litMensaje.Text = "<div class=\"message info\"><p>Exito! los precios se guardaron satisfactoriamente.</p></div>";
            }
            catch (Exception)
            {
                litMensaje.Text = "<div class=\"message info\"><p>No se pudo Guardar los Precios, por favor intente de nuevo o más tarde.</p></div>";
            }
        }
    }
}
